package visitor

import "fmt"

// 定义访问者接口
type IVisitor interface {
	Visit()
}

// 实现访问者接口
type ProductionVisitor struct {
}

func (v ProductionVisitor) Visit() {
	fmt.Println("这是生产环境")
}

type TestingVisitor struct {
}

func (t TestingVisitor) Visit() {
	fmt.Println("这是测试环境")
}

// 定义元素接口
type IElement interface {
	Accept(visitor IVisitor)
}

// 实现元素接口
type Element struct {
}

func (el Element) Accept(visitor IVisitor) {
	visitor.Visit()
}

type EnvExample struct {
	Element
}

func (e EnvExample) Print(visitor IVisitor) {
	e.Element.Accept(visitor)
}
